#include <iostream>
#include <string>
#include <jsoncpp/json/json.h>


int main()
{
    std::string json_string = "{\"name\":\"张三\", \"age\":30, \"city\":\"北京\"}";
    
    Json::Value root;
    Json::CharReaderBuilder builder;
    std::unique_ptr<Json::CharReader> reader(builder.newCharReader());
    
    std::string errors;
    bool parsingSuccessful = reader->parse(json_string.c_str(), 
                                          json_string.c_str() + json_string.length(), 
                                          &root, 
                                          &errors);
    
    if (!parsingSuccessful)
    {
        std::cout << "Failed to parse JSON: " << errors << std::endl;
        return 1;
    }
    
    // 访问数据（同上）
    std::string name = root["name"].asString();
    int age = root["age"].asInt();
    std::string city = root["city"].asString();
    
    std::cout << "Name: " << name << std::endl;
    std::cout << "Age: " << age << std::endl;
    std::cout << "City: " << city << std::endl;
    
    return 0;
}


// int main()
// {
//     // JSON 字符串
//     std::string json_string = "{\"name\":\"张三\", \"age\":30, \"city\":\"北京\"}";
//     // 解析 JSON 字符串
//     Json::Reader reader;
//     Json::Value root;
//     // 从字符串中读取 JSON 数据
//     bool parsingSuccessful = reader.parse(json_string, root);
//     if (!parsingSuccessful)
//     {
//         // 解析失败，输出错误信息
//         std::cout << "Failed to parse JSON: " << reader.getFormattedErrorMessages() << std::endl;
//         return 1;
//     }
//     // 访问 JSON 数据
//     std::string name = root["name"].asString();
//     int age = root["age"].asInt();
//     std::string city = root["city"].asString();
//     // 输出结果
//     std::cout << "Name: " << name << std::endl;
//     std::cout << "Age: " << age << std::endl;
//     std::cout << "City: " << city << std::endl;
//     return 0;
// }


// 序列化
// int main()
// {
//     Json::Value root;
//     root["name"] = "Bob";
//     root["sex"] = "男";
//     Json::FastWriter writer;
//     std::string s = writer.write(root);
//     std::cout << s << std::endl;
//     return 0;
// }

// int main()
// {
//     Json::Value root;
//     root["name"] = "Bob";
//     root["sex"] = "男";
//     Json::StyledWriter writer;
//     std::string s = writer.write(root);
//     std::cout << s << std::endl;
//     return 0;
// }

// int main()
// {
//     Json::Value root;
//     root["name"] = "Bob";
//     root["sex"] = "男";
//     Json::StreamWriterBuilder wbuilder; // StreamWriter的工厂
//     wbuilder["indentation"] = "";       // 紧凑输出
//     wbuilder["emitUTF8"] = true;        // 直接输出 UTF-8 字符（避免转义）
//     std::unique_ptr<Json::StreamWriter> writer(wbuilder.newStreamWriter());
//     std::stringstream ss;
//     writer->write(root, &ss);
//     std::cout << ss.str() << std::endl;
//     return 0;
// }

// int main()
// {
//     Json::Value root;
//     root["name"] = "Bob";
//     root["sex"] = "男";
//     Json::StreamWriterBuilder wbuilder; // StreamWriter的工厂
//     std::unique_ptr<Json::StreamWriter> writer(wbuilder.newStreamWriter());
//     std::stringstream ss;
//     writer->write(root, &ss);
//     std::cout << ss.str() << std::endl;
//     return 0;
// }

// int main()
// {
//     Json::Value root;
//     root["name"] = "张三";
//     root["sex"] = "男";
//     std::string s = root.toStyledString();
//     std::cout << s << std::endl;
//     return 0;
// }
